// axios封装
import axios from 'axios'
// 引用element提示框
import { ElMessage } from 'element-plus'
// 引用状态管理
import { useUserStore } from '@/store/userStore'
import router from '@/router'

// 创建axios
const request = axios.create({
    baseURL: '/api',  // 解决跨域问题对应的baseUrl 
    timeout: 30 * 1000,// 设置超时时间

})

// 添加请求拦截器
request.interceptors.request.use(function (config) {
    // 获取到token
    const token = localStorage.getItem('token');
    if (token) {
        // 将token 放在请求头中
        config.headers["Authorization"] = `Bearer ${token}`;
        // 或者根据后端要求使用其他字段名
        // config.headers["token"] = token;
    }
    
    // 添加请求日志（开发环境）
    if (import.meta.env.DEV) {
        console.log('🚀 发送请求:', {
            url: config.url,
            method: config.method,
            data: config.data,
            params: config.params
        });
    }
    
    return config;
}, function (error) {
    // 对请求错误做些什么
    console.error('❌ 请求拦截器错误:', error);
    return Promise.reject(error);
});

// 添加响应拦截器
request.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    const code = response.data.code || 200;
    const message = response.data.message || '';
    
    if (code === 200) {
        // 成功时返回数据
        return response.data.data || response.data;
    } else if (code === 401) {
        ElMessage.error("认证失败，无法访问系统资源");
        // 清除用户状态并跳转到登录页
        const userStore = useUserStore()
        userStore.clearUserInfo()
        router.push('/login')
        return Promise.reject(new Error(message || '认证失败'));
    } else if (code === 403) {
        ElMessage.error("当前操作没有权限");
        return Promise.reject(new Error(message || '权限不足'));
    } else if (code === 404) {
        ElMessage({
            message: "访问资源不存在",
            type: 'error',
            duration: 5 * 1000
        });
        return Promise.reject(new Error(message || '资源不存在'));
    } else {
        // 其他错误
        ElMessage({
            message: message || "系统未知错误，请反馈给管理员",
            type: 'error',
            duration: 5 * 1000
        });
        return Promise.reject(new Error(message || '系统错误'));
    }
    
}, function (error) {
    // 对响应错误做点什么
    // 统一做了错误请求的处理
    let message = error.message || '请求失败';
    
    // 处理网络错误
    if (message === "Network Error") {
        message = "后端接口连接异常";
    } else if (message.includes("timeout")) {
        message = "系统接口请求超时";
    } else if (message.includes("Request failed with status code")) {
        const statusCode = message.match(/\d{3}/)?.[0] || '未知';
        message = `系统接口${statusCode}异常`;
    } else if (error.response) {
        // 服务器响应了错误状态码
        const status = error.response.status;
        switch (status) {
            case 401:
                message = "认证失败，请重新登录";
                // 清除用户状态并跳转到登录页
                const userStore = useUserStore()
                userStore.clearUserInfo()
                router.push('/login')
                break;
            case 403:
                message = "权限不足";
                break;
            case 404:
                message = "请求的资源不存在";
                break;
            case 500:
                message = "服务器内部错误";
                break;
            default:
                message = `请求失败 (${status})`;
        }
    }
    
    // 添加响应日志（开发环境）
    if (import.meta.env.DEV) {
        console.error('❌ 响应错误:', {
            message,
            error: error.response?.data || error.message,
            status: error.response?.status
        });
    }
    
    // 显示弹窗信息
    ElMessage({
        message: message,
        type: 'error',
        duration: 5 * 1000
    });
    
    return Promise.reject(error);
});


export default request